package com.yystudy.rpc.serializer;

import com.yystudy.rpc.spi.SpiLoader;

import java.util.HashMap;
import java.util.Map;

/**
 * 序列化器工厂（用于获取序列化器对象）
 *
 */
public class SerializerFactory {
    // region 使用硬编码的方式加载序列化器服务实现类
//    /**
//     * 序列化映射（用于实现单例）
//     */
//    private static final Map<String, Serializer> KEY_SERIALIZER_MAP = new HashMap<>() {{
//        put(SerializerKeys.JDK, new JdkSerializer());
//        put(SerializerKeys.JSON, new JsonSerializer());
//        put(SerializerKeys.KRYO, new KryoSerializer());
//        put(SerializerKeys.HESSIAN, new HessianSerializer());
//    }};
//
//    /**
//     * 默认序列化器
//     */
//    private static final Serializer DEFAULT_SERIALIZER = KEY_SERIALIZER_MAP.get("jdk");
//
//    /**
//     * 获取实例
//     *
//     * @param key
//     * @return
//     */
//    public static Serializer getInstance(String key) {
//        return KEY_SERIALIZER_MAP.getOrDefault(key, DEFAULT_SERIALIZER);
//    }
    // endregion


    // region 使用 SPI 的方式加载序列化器服务实现类
    static {
        // 加载Serializer接口的所有服务实现类（META-INF/rpc/custom/com.yystudy.rpc.serializer.Serializer）
        SpiLoader.load(Serializer.class);
    }

    /**
     * 根据key获取该服务接口的一个具体地实现对象
     *
     * @param key  实现类key名
     * @return  实现类实例对象
     */
    public static Serializer getInstance(String key) {
        return SpiLoader.getInstance(Serializer.class, key);
    }

    // endregion
}